{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "import seaborn as sns\n",
    "import pandas as pd\n",
    "sns.set(font_scale=1.5)\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from sklearn import linear_model\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.metrics import mean_absolute_error, mean_squared_error\n",
    "from sklearn.preprocessing import PolynomialFeatures, StandardScaler\n",
    "from sklearn.pipeline import Pipeline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "file1 = r'D:/Programing/python_projects/machine_learning_algorithm/data_set/diamond_training_data.csv'\n",
    "file2 = r'D:/Programing/python_projects/machine_learning_algorithm/data_set/diamond_validation_data.csv'\n",
    "diamond_training_data = pd.read_csv(file1)\n",
    "diamond_validation_data = pd.read_csv(file2)\n",
    "numeric_diamond_training_data = diamond_training_data[[\n",
    "    \"carat\", \"depth\", \"table\", \"x\", \"y\", \"z\"\n",
    "]]\n",
    "numeric_diamond_validation_data = diamond_validation_data[[\n",
    "    \"carat\", \"depth\", \"table\", \"x\", \"y\", \"z\"\n",
    "]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>carat</th>\n",
       "      <th>depth</th>\n",
       "      <th>table</th>\n",
       "      <th>x</th>\n",
       "      <th>y</th>\n",
       "      <th>z</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.00</td>\n",
       "      <td>61.8</td>\n",
       "      <td>56.0</td>\n",
       "      <td>6.38</td>\n",
       "      <td>6.43</td>\n",
       "      <td>3.96</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.18</td>\n",
       "      <td>62.5</td>\n",
       "      <td>55.0</td>\n",
       "      <td>8.31</td>\n",
       "      <td>8.34</td>\n",
       "      <td>5.20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.53</td>\n",
       "      <td>62.2</td>\n",
       "      <td>54.0</td>\n",
       "      <td>5.18</td>\n",
       "      <td>5.23</td>\n",
       "      <td>3.24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.30</td>\n",
       "      <td>61.5</td>\n",
       "      <td>57.0</td>\n",
       "      <td>4.31</td>\n",
       "      <td>4.34</td>\n",
       "      <td>2.66</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.76</td>\n",
       "      <td>58.3</td>\n",
       "      <td>62.0</td>\n",
       "      <td>6.12</td>\n",
       "      <td>5.95</td>\n",
       "      <td>3.52</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1495</th>\n",
       "      <td>2.35</td>\n",
       "      <td>62.3</td>\n",
       "      <td>58.0</td>\n",
       "      <td>8.51</td>\n",
       "      <td>8.44</td>\n",
       "      <td>5.28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1496</th>\n",
       "      <td>0.42</td>\n",
       "      <td>62.2</td>\n",
       "      <td>56.0</td>\n",
       "      <td>4.81</td>\n",
       "      <td>4.77</td>\n",
       "      <td>2.98</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1497</th>\n",
       "      <td>1.16</td>\n",
       "      <td>61.8</td>\n",
       "      <td>55.0</td>\n",
       "      <td>6.75</td>\n",
       "      <td>6.78</td>\n",
       "      <td>4.18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1498</th>\n",
       "      <td>0.55</td>\n",
       "      <td>60.3</td>\n",
       "      <td>57.0</td>\n",
       "      <td>5.32</td>\n",
       "      <td>5.37</td>\n",
       "      <td>3.23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1499</th>\n",
       "      <td>0.57</td>\n",
       "      <td>60.1</td>\n",
       "      <td>56.0</td>\n",
       "      <td>5.40</td>\n",
       "      <td>5.42</td>\n",
       "      <td>3.25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1500 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      carat  depth  table     x     y     z\n",
       "0      1.00   61.8   56.0  6.38  6.43  3.96\n",
       "1      2.18   62.5   55.0  8.31  8.34  5.20\n",
       "2      0.53   62.2   54.0  5.18  5.23  3.24\n",
       "3      0.30   61.5   57.0  4.31  4.34  2.66\n",
       "4      0.76   58.3   62.0  6.12  5.95  3.52\n",
       "...     ...    ...    ...   ...   ...   ...\n",
       "1495   2.35   62.3   58.0  8.51  8.44  5.28\n",
       "1496   0.42   62.2   56.0  4.81  4.77  2.98\n",
       "1497   1.16   61.8   55.0  6.75  6.78  4.18\n",
       "1498   0.55   60.3   57.0  5.32  5.37  3.23\n",
       "1499   0.57   60.1   56.0  5.40  5.42  3.25\n",
       "\n",
       "[1500 rows x 6 columns]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "numeric_diamond_training_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>carat</th>\n",
       "      <th>depth</th>\n",
       "      <th>table</th>\n",
       "      <th>x</th>\n",
       "      <th>y</th>\n",
       "      <th>z</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.51</td>\n",
       "      <td>61.5</td>\n",
       "      <td>57.0</td>\n",
       "      <td>5.11</td>\n",
       "      <td>5.16</td>\n",
       "      <td>3.16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.70</td>\n",
       "      <td>61.5</td>\n",
       "      <td>57.0</td>\n",
       "      <td>5.64</td>\n",
       "      <td>5.68</td>\n",
       "      <td>3.48</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.09</td>\n",
       "      <td>62.5</td>\n",
       "      <td>59.0</td>\n",
       "      <td>6.54</td>\n",
       "      <td>6.57</td>\n",
       "      <td>4.10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.80</td>\n",
       "      <td>61.8</td>\n",
       "      <td>57.0</td>\n",
       "      <td>7.83</td>\n",
       "      <td>7.79</td>\n",
       "      <td>4.83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.71</td>\n",
       "      <td>60.9</td>\n",
       "      <td>57.0</td>\n",
       "      <td>5.74</td>\n",
       "      <td>5.76</td>\n",
       "      <td>3.50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>495</th>\n",
       "      <td>1.50</td>\n",
       "      <td>62.5</td>\n",
       "      <td>58.0</td>\n",
       "      <td>7.21</td>\n",
       "      <td>7.28</td>\n",
       "      <td>4.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>496</th>\n",
       "      <td>0.52</td>\n",
       "      <td>63.5</td>\n",
       "      <td>57.0</td>\n",
       "      <td>5.08</td>\n",
       "      <td>5.13</td>\n",
       "      <td>3.24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>497</th>\n",
       "      <td>0.54</td>\n",
       "      <td>62.2</td>\n",
       "      <td>61.0</td>\n",
       "      <td>5.24</td>\n",
       "      <td>5.15</td>\n",
       "      <td>3.23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>498</th>\n",
       "      <td>1.01</td>\n",
       "      <td>63.1</td>\n",
       "      <td>58.0</td>\n",
       "      <td>6.40</td>\n",
       "      <td>6.31</td>\n",
       "      <td>4.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>499</th>\n",
       "      <td>0.37</td>\n",
       "      <td>62.0</td>\n",
       "      <td>56.0</td>\n",
       "      <td>4.62</td>\n",
       "      <td>4.64</td>\n",
       "      <td>2.87</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>500 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     carat  depth  table     x     y     z\n",
       "0     0.51   61.5   57.0  5.11  5.16  3.16\n",
       "1     0.70   61.5   57.0  5.64  5.68  3.48\n",
       "2     1.09   62.5   59.0  6.54  6.57  4.10\n",
       "3     1.80   61.8   57.0  7.83  7.79  4.83\n",
       "4     0.71   60.9   57.0  5.74  5.76  3.50\n",
       "..     ...    ...    ...   ...   ...   ...\n",
       "495   1.50   62.5   58.0  7.21  7.28  4.53\n",
       "496   0.52   63.5   57.0  5.08  5.13  3.24\n",
       "497   0.54   62.2   61.0  5.24  5.15  3.23\n",
       "498   1.01   63.1   58.0  6.40  6.31  4.01\n",
       "499   0.37   62.0   56.0  4.62  4.64  2.87\n",
       "\n",
       "[500 rows x 6 columns]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "numeric_diamond_validation_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_training_and_validation_mae(degree):\n",
    "    poly = PolynomialFeatures(degree=degree)\n",
    "    polynomial_diamond_training_data = poly.fit_transform(\n",
    "        numeric_diamond_training_data)\n",
    "    polynomial_diamond_validation_data = poly.fit_transform(\n",
    "        numeric_diamond_validation_data)\n",
    "\n",
    "    diamond_model = LinearRegression()\n",
    "    diamond_model.fit(polynomial_diamond_training_data,\n",
    "                      diamond_training_data[[\"price\"]])\n",
    "    training_error = mean_absolute_error(\n",
    "        diamond_model.predict(polynomial_diamond_training_data),\n",
    "        diamond_training_data[[\"price\"]])\n",
    "    validation_error = mean_absolute_error(\n",
    "        diamond_model.predict(polynomial_diamond_validation_data),\n",
    "        diamond_validation_data[[\"price\"]])\n",
    "    return training_error, validation_error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "maes = np.array([get_training_and_validation_mae(i) for i in range(0, 6)\n",
    "                ])  # sklearn==0.19版本才可以用0维\n",
    "plt.plot(maes[:, 0])\n",
    "plt.plot(maes[:, 1])\n",
    "plt.axis([0, 5, 0, 3000])\n",
    "plt.legend([\"training\", \"validation\"])\n",
    "plt.xlabel('Polynomial Degree')\n",
    "plt.ylabel('MAE')\n",
    "fig = plt.gcf()\n",
    "fig.savefig(\"mae_vs_complexity_example.png\", dpi=300, bbox_inches=\"tight\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_training_and_validation_mse(degree):\n",
    "    poly = PolynomialFeatures(degree=degree)\n",
    "    polynomial_diamond_training_data = poly.fit_transform(\n",
    "        numeric_diamond_training_data)\n",
    "    polynomial_diamond_validation_data = poly.fit_transform(\n",
    "        numeric_diamond_validation_data)\n",
    "\n",
    "    diamond_model = LinearRegression()\n",
    "    diamond_model.fit(polynomial_diamond_training_data,\n",
    "                      diamond_training_data[[\"price\"]])\n",
    "    training_error = mean_squared_error(\n",
    "        diamond_model.predict(polynomial_diamond_training_data),\n",
    "        diamond_training_data[[\"price\"]])\n",
    "    validation_error = mean_squared_error(\n",
    "        diamond_model.predict(polynomial_diamond_validation_data),\n",
    "        diamond_validation_data[[\"price\"]])\n",
    "    return training_error, validation_error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mses = np.array([get_training_and_validation_mae(i) for i in range(0, 6)])\n",
    "plt.plot(maes[:, 0])\n",
    "plt.plot(maes[:, 1])\n",
    "plt.axis([0, 5, 0, 3000])\n",
    "plt.legend([\"training\", \"validation\"])\n",
    "plt.xlabel('Polynomial Degree')\n",
    "plt.ylabel('MSE')\n",
    "fig = plt.gcf()\n",
    "fig.savefig(\"mse_vs_complexity_example.png\", dpi=300, bbox_inches=\"tight\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LinearRegression(copy_X=True, fit_intercept=False, n_jobs=1, normalize=False)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diamond_lm = LinearRegression(fit_intercept=False)\n",
    "diamond_lm.fit(numeric_diamond_training_data, diamond_training_data['price'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([10929.22839108,   102.63351882,   -68.58659808, -4337.56181477,\n",
       "        5726.98390592, -4264.46705819])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diamond_lm.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Ridge(alpha=1, copy_X=True, fit_intercept=False, max_iter=None,\n",
       "   normalize=False, random_state=None, solver='auto', tol=0.001)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diamond_lrm = linear_model.Ridge(alpha=1, fit_intercept=False)\n",
    "diamond_lrm.fit(numeric_diamond_training_data, diamond_training_data['price'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 9982.92218626,    70.87249868,   -59.86772488, -2858.44145594,\n",
       "        3873.86898817, -3032.30595988])"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diamond_lrm.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "ss = StandardScaler()\n",
    "ss.fit(numeric_diamond_training_data)\n",
    "scaled_numeric_diamond_training_data = ss.transform(\n",
    "    numeric_diamond_training_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.40699664,  0.08570641, -0.65913598,  0.55500569,  0.60192185,\n",
       "         0.58918337],\n",
       "       [ 2.90659436,  0.59760475, -1.12355608,  2.29996541,  2.33910941,\n",
       "         2.40184537],\n",
       "       [-0.58860583,  0.37821974, -1.58797619, -0.52994336, -0.48950489,\n",
       "        -0.46333005],\n",
       "       ...,\n",
       "       [ 0.74592515,  0.08570641, -1.12355608,  0.88953164,  0.92025465,\n",
       "         0.91078469],\n",
       "       [-0.54623977, -1.01121861, -0.19471587, -0.40336597, -0.36217177,\n",
       "        -0.47794829],\n",
       "       [-0.50387371, -1.15747527, -0.65913598, -0.33103604, -0.31669566,\n",
       "        -0.44871181]])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scaled_numeric_diamond_training_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Ridge(alpha=1, copy_X=True, fit_intercept=False, max_iter=None,\n",
       "   normalize=False, random_state=None, solver='auto', tol=0.001)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diamond_lrms = linear_model.Ridge(alpha=1, fit_intercept=False)\n",
    "diamond_lrms.fit(scaled_numeric_diamond_training_data,\n",
    "                 diamond_training_data['price'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 5037.85377372,   -18.43159469,  -157.06975023, -3309.51865518,\n",
       "        3571.6046855 , -1552.60486515])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diamond_lrms.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "     steps=[('scale', StandardScaler(copy=True, with_mean=True, with_std=True)), ('model', Ridge(alpha=1, copy_X=True, fit_intercept=False, max_iter=None,\n",
       "   normalize=False, random_state=None, solver='auto', tol=0.001))])"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scale_ridge_model_pipeline = Pipeline([\n",
    "    ('scale', StandardScaler()),\n",
    "    ('model', linear_model.Ridge(alpha=1, fit_intercept=False))\n",
    "])\n",
    "scale_ridge_model_pipeline.fit(numeric_diamond_training_data,\n",
    "                               diamond_training_data['price'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 5037.85377372,   -18.43159469,  -157.06975023, -3309.51865518,\n",
       "        3571.6046855 , -1552.60486515])"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scale_ridge_model_pipeline.named_steps['model'].coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_diamond_ridge_training_and_validation_mae(alpha):\n",
    "    scale_poly_fit_pipeline = Pipeline([\n",
    "        ('scale', StandardScaler()), ('poly', PolynomialFeatures(4)),\n",
    "        ('model', linear_model.Ridge(alpha=alpha, fit_intercept=False))\n",
    "    ])\n",
    "    scale_poly_fit_pipeline.fit(numeric_diamond_training_data,\n",
    "                                diamond_training_data['price'])\n",
    "\n",
    "    training_mae = mean_absolute_error(\n",
    "        scale_poly_fit_pipeline.predict(numeric_diamond_training_data),\n",
    "        diamond_training_data['price'])\n",
    "    validation_mae = mean_absolute_error(\n",
    "        scale_poly_fit_pipeline.predict(numeric_diamond_validation_data),\n",
    "        diamond_validation_data['price'])\n",
    "    return training_mae, validation_mae"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_diamond_ridge_training_and_validation_mse(alpha):\n",
    "    scale_poly_fit_pipeline = Pipeline([\n",
    "        ('scale', StandardScaler()), ('poly', PolynomialFeatures(4)),\n",
    "        ('model', linear_model.Ridge(alpha=alpha, fit_intercept=False))\n",
    "    ])\n",
    "    scale_poly_fit_pipeline.fit(numeric_diamond_training_data,\n",
    "                                diamond_training_data['price'])\n",
    "\n",
    "    training_mse = mean_squared_error(\n",
    "        scale_poly_fit_pipeline.predict(numeric_diamond_training_data),\n",
    "        diamond_training_data['price'])\n",
    "    validation_mse = mean_squared_error(\n",
    "        scale_poly_fit_pipeline.predict(numeric_diamond_validation_data),\n",
    "        diamond_validation_data['price'])\n",
    "    return training_mse, validation_mse"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'MAE')"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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fAFpaUfp0aMXHTpEAxAf35127drXeq+PP95Menoa//rXG/To0QuAq68eTElJMf/85z+44YZRaDQaALp2jeexxxYC0K8fHDz4C1999WWjvncXSwJJCCHOolKpuOGGUXz00Qc88MBDaLVatm37lO7dexATE8t9981Dq1VTWFhMRkY6x45lsXfvboA6ny57tp9+cvW8rrnmzEPz1Go11103jHXrXnNv++tfnwagsLCQzMwMsrMz2bHja8DVY2uIfft+IDq6ozuMTrvhhlF8++03ZGSk06VLHIDHw/0A2rSxUFlZ0aD3uVQkkIQQl1xA/OBG90z8yY03/oH1619nz57v6dMngZSUr/jLX2YBcOxYNitWLGH37u8ICAigU6cYunbtBjTsfqCSkhIAwsNNHtsjIiI8Xh86dIBnn13KwYMHCAoKIja2CxZL21Pv07B2lJQUYzZH1Np++rpQWZnNve33z01SqVRev79JAkkIIX4nNrYL8fGX8cUXWykrK6O6uorhw2/A6XTy0EP3o9PpWLt2HV27xqPVaklLS2XLlk8adO6wsHAACgsLiIyMcm8vLi52/72szMa8eXPo2rU7/+//vU3nzjGo1Wp27kzhyy8/b3A7jMZQfvvt11rbrdZ8j7r4C5nUIIQQ5zBy5B/YuTOFzz//lH79BmA2R1BcXERmZga33DKWyy7riVbr+kz/7bffAOB0Ous971VX9QPg88+3emw/PRwHkJGRTnFxMePHTyA2tot7tt/p91EU1/ucPQvwXPr06Ut2dhYHD/7isX3r1i1EREQQHd2x3vp6k/SQhBDiHIYPv5GXXnqBr7/ezuOPu6ZXm0xm2rVrz9tvv4XJFIler+e773byzjtvAa5ZbfWJju7IzTeP5ZVXXqSmppquXeP5v//7mKNHf3OX6dQpBr1ez+uvr0WlArVaw5dffs7HH38AQEWF69qOwWAEYPv2z7n66iQ6d47xeK8//GEM7767kUceeZC7755FVFQbPvvs//j222945JEn6g00b/Ov2gghhJ8wmyPo128AgYE6hgy51r19yZJniIiIZNGihSxc+Ci//PIzS5eupHPnGI+p4uczb94jTJw4mf/+dyOPPTafqqoqj1l7BoOBp59+FqfTyRNPPMyiRQs5cSKXF19cQ0iInp9++hGAvn0TGTToGlavfomXXnqh1vsEBwfz4otrGDBg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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "alphas = 10**np.linspace(3, -3, 100)\n",
    "maes = np.array(\n",
    "    [get_diamond_ridge_training_and_validation_mae(alpha) for alpha in alphas])\n",
    "plt.plot(alphas, maes[:, 0])\n",
    "plt.plot(alphas, maes[:, 1])\n",
    "plt.legend([\"training\", \"validation\"])\n",
    "plt.xlabel(r'$\\alpha$')\n",
    "plt.ylabel('MAE')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'MSE')"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "alphas = 10**np.linspace(3, -3, 100)\n",
    "mses = np.array(\n",
    "    [get_diamond_ridge_training_and_validation_mse(alpha) for alpha in alphas])\n",
    "plt.plot(alphas, mses[:, 0])\n",
    "plt.plot(alphas, mses[:, 1])\n",
    "plt.legend([\"training\", \"validation\"])\n",
    "plt.xlabel(r'$\\alpha$')\n",
    "plt.ylabel('MSE')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "alphas = 10**np.linspace(-3, 3, 100)\n",
    "maes = np.array(\n",
    "    [get_diamond_ridge_training_and_validation_mae(alpha) for alpha in alphas])\n",
    "plt.semilogx(alphas, maes[:, 0])\n",
    "plt.semilogx(alphas, maes[:, 1])\n",
    "plt.legend(['training', 'validation'])\n",
    "plt.xlabel(r'$\\alpha$')\n",
    "plt.ylabel('MAE')\n",
    "fig = plt.gcf()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "alphas = 10**np.linspace(3, -3, 100)\n",
    "mses = np.array(\n",
    "    [get_diamond_ridge_training_and_validation_mse(alpha) for alpha in alphas])\n",
    "plt.semilogx(alphas, maes[:, 0])\n",
    "plt.semilogx(alphas, maes[:, 1])\n",
    "plt.legend(['training', 'validation'])\n",
    "plt.xlabel(r'$\\alpha$')\n",
    "plt.ylabel('MSE')\n",
    "fig = plt.gcf()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = sns.load_dataset(\"tips\")\n",
    "thetas = np.linspace(0, 0.3, 100)\n",
    "errors = [\n",
    "    mean_squared_error(data['tip'], data['total_bill'] * theta)\n",
    "    for theta in thetas\n",
    "]\n",
    "plt.plot(thetas, errors)\n",
    "plt.xlabel(r'$\\theta$')\n",
    "plt.ylabel('MSE')\n",
    "fig = plt.gcf()\n",
    "fig.savefig(\"MSE_vs_theta_alpha_zero.png\", dpi=300, bbox_inches=\"tight\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = sns.load_dataset(\"tips\")\n",
    "thetas = np.linspace(0, 0.3, 100)\n",
    "errors = [\n",
    "    mean_squared_error(data['tip'], data['total_bill'] * theta + 1 * theta**2)\n",
    "    for theta in thetas\n",
    "]\n",
    "plt.plot(thetas, errors)\n",
    "plt.xlabel(r'$\\theta$')\n",
    "plt.ylabel(r'MSE + $1 \\times \\theta^2$')\n",
    "fig = plt.gcf()\n",
    "fig.savefig(\"objective_vs_theta_alpha_1.png\", dpi=300, bbox_inches=\"tight\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = sns.load_dataset('tips')\n",
    "thetas = np.linspace(0, 0.3, 100)\n",
    "errors = [\n",
    "    mean_squared_error(data['tip'], data['total_bill'] * theta + 10 * theta**2)\n",
    "    for theta in thetas\n",
    "]\n",
    "plt.plot(thetas, errors)\n",
    "plt.xlabel(r'$\\theta$')\n",
    "plt.ylabel(r'MSE + $10 \\times \\theta^2$')\n",
    "fig = plt.gcf()\n",
    "fig.savefig('objective_vs_theta_alpha_10.png', dpi=300, bbox_inches='tight')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = sns.load_dataset(\"tips\")\n",
    "thetas = np.linspace(0, 0.3, 100)\n",
    "errors = [\n",
    "    mean_squared_error(data['tip'], data['total_bill'] * theta + 100 * theta**2)\n",
    "    for theta in thetas\n",
    "]\n",
    "plt.plot(thetas, errors)\n",
    "plt.xlabel(r'$\\theta$')\n",
    "plt.ylabel(r'MSE + $100 \\times \\theta^2$')\n",
    "fig = plt.gcf()\n",
    "fig.savefig(\"objective_vs_theta_alpha_100.png\", dpi=300, bbox_inches=\"tight\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "     steps=[('scale', StandardScaler(copy=True, with_mean=True, with_std=True)), ('poly', PolynomialFeatures(degree=4, include_bias=True, interaction_only=False)), ('model', Ridge(alpha=100, copy_X=True, fit_intercept=False, max_iter=None,\n",
       "   normalize=False, random_state=None, solver='auto', tol=0.001))])"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scale_poly_ridge_pipeline = Pipeline([\n",
    "    ('scale', StandardScaler()), ('poly', PolynomialFeatures(4)),\n",
    "    ('model', linear_model.Ridge(alpha=100, fit_intercept=False))\n",
    "])\n",
    "scale_poly_ridge_pipeline.fit(numeric_diamond_training_data,\n",
    "                              diamond_training_data['price'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "     steps=[('scale', StandardScaler(copy=True, with_mean=True, with_std=True)), ('poly', PolynomialFeatures(degree=4, include_bias=True, interaction_only=False)), ('model', Lasso(alpha=100, copy_X=True, fit_intercept=False, max_iter=1000,\n",
       "   normalize=False, positive=False, precompute=False, random_state=None,\n",
       "   selection='cyclic', tol=0.0001, warm_start=False))])"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scale_poly_lasso_pipeline = Pipeline([\n",
    "    ('scale', StandardScaler()), ('poly', PolynomialFeatures(degree=4)),\n",
    "    ('model', linear_model.Lasso(alpha=100, fit_intercept=False))\n",
    "])\n",
    "\n",
    "scale_poly_lasso_pipeline.fit(numeric_diamond_training_data,\n",
    "                              diamond_training_data[[\"price\"]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 2.27153953e+03,  3.98227815e+02, -6.82758865e+00, -3.74460584e+01,\n",
       "        7.91823339e+02,  8.66815062e+02,  8.19389264e+02,  3.79109981e+01,\n",
       "       -2.50456554e+01,  2.95370877e+01,  1.02432495e+02,  1.45952707e+02,\n",
       "        1.21922865e+02,  1.39460338e+02,  1.61544769e+02, -4.38658218e+01,\n",
       "       -2.63082781e+01,  5.63552218e+00,  1.71768145e+02,  1.71773244e+01,\n",
       "       -9.38674578e+00,  1.18860959e+01,  2.40646162e+02,  2.89532706e+02,\n",
       "        2.57557983e+02,  3.43896566e+02,  3.10683332e+02,  2.89494712e+02,\n",
       "       -6.86183491e+01, -2.76113679e+01,  5.82712255e+00, -6.29703583e+01,\n",
       "       -2.47881613e+01, -4.01775423e+01,  2.96981753e-01, -6.45176449e+01,\n",
       "       -1.16608586e+00, -2.82377840e+01, -1.07396965e+00, -1.51492873e+01,\n",
       "        2.00215331e+00, -1.27307466e+01, -1.71120457e+01, -5.52992933e+01,\n",
       "       -8.86835693e+00, -2.61214709e+01,  3.95514229e+01,  1.61413957e+01,\n",
       "        3.48818079e+00, -1.20217730e+01,  3.46523794e+01, -4.10584645e+01,\n",
       "        6.94721087e+01, -1.32822476e+01,  3.72820800e+01, -2.78128495e+00,\n",
       "       -3.65111831e+01,  8.57825407e+00,  1.54849856e+01, -4.71661137e+00,\n",
       "        1.74961336e+01, -2.64518860e+01,  1.07646111e+01,  1.94813141e+01,\n",
       "        1.23008046e+01, -2.83772591e+01,  4.68084937e+01,  1.36299935e+00,\n",
       "       -2.82201239e+00, -2.20365538e+01, -1.94203010e+01, -3.97602236e+01,\n",
       "       -4.27830823e+01, -2.91033939e+01, -3.27617250e+01,  2.01751064e+01,\n",
       "       -1.27065236e+00,  7.60640792e+01,  4.90779851e+01,  3.34067020e+01,\n",
       "        1.35276276e+02,  1.02359853e+02,  8.27723128e+01,  6.81325886e+01,\n",
       "        9.50091575e+01, -7.09663423e+01,  1.58721519e+02,  2.67047496e+01,\n",
       "        1.70337146e+01,  1.93846974e+01, -7.31927137e+00,  2.79225164e+01,\n",
       "        5.80233400e+01, -2.62693101e+01,  2.03188593e+01,  2.62695116e+01,\n",
       "        3.85634241e+01,  2.21689204e+01,  4.45661339e+01, -5.86167242e+01,\n",
       "       -4.51224468e+01, -2.76741595e+01, -3.07981227e+01, -2.78220553e+01,\n",
       "       -9.35131992e+00, -1.00461394e+02, -1.72202372e+01, -3.74166361e+01,\n",
       "        6.59225310e+01, -1.81509584e+01, -1.51073128e+01,  2.80836734e+01,\n",
       "       -4.83026070e+01,  2.14621657e+00,  9.25378591e+01,  1.85198738e+01,\n",
       "        6.09361089e+01, -5.51861556e+01,  2.26720832e+00,  3.42335527e+01,\n",
       "       -3.05221761e+01, -5.59994495e+01,  4.79677995e+01, -1.68517594e+01,\n",
       "       -1.37918554e+01, -2.35457518e+01, -8.15433764e+00, -3.21661835e+01,\n",
       "       -2.90391498e+01, -8.24001324e+00, -1.13101269e+02, -8.14873081e+01,\n",
       "       -6.36602065e+01, -4.88453099e+01, -4.40494290e+01, -2.37893482e+01,\n",
       "       -1.49050740e+01, -2.31475867e+01, -1.37668975e+01,  6.72136519e+00,\n",
       "       -1.79421032e+01, -4.12006171e+01, -7.02483925e+00,  7.16478706e+01,\n",
       "        4.50477480e+01, -4.95468195e+01,  2.74537768e+01, -6.83946793e+00,\n",
       "       -1.76986482e+01, -1.12578289e+02, -8.05214592e+00, -7.72101019e+01,\n",
       "        9.26500601e+01,  3.24668236e+01, -1.67125290e+01, -2.55042950e+01,\n",
       "       -1.36094722e+01,  5.11591598e+01,  8.77580117e+00,  3.95387913e+01,\n",
       "       -2.64925693e+01,  2.67906112e+01, -9.42301414e+01, -4.34834217e+01,\n",
       "       -5.59191568e+00,  7.06336641e+01,  6.23983327e+00,  3.72761358e+01,\n",
       "       -5.83622175e+01, -1.20986521e+01,  9.04327730e+00, -1.22801105e+02,\n",
       "       -6.19452109e+01, -2.49431592e+01, -3.73663606e+00, -1.16451083e+01,\n",
       "        4.20267080e+01, -4.96052486e+01,  3.00017646e+01, -1.09571507e+02,\n",
       "       -1.11647827e+01, -7.07108375e+01,  9.22738501e+01,  3.65106120e+01,\n",
       "       -1.99244231e+01, -1.29047049e+01, -2.01888815e+01, -8.83795857e+00,\n",
       "       -2.60667274e+01, -2.55575356e+01, -6.16231748e+00, -3.03517382e+01,\n",
       "       -4.10238648e+01, -3.29912401e+01, -1.24630970e+01, -1.03856230e+02,\n",
       "       -5.85918862e+01, -4.86223272e+01, -1.18387162e+01, -1.36481550e+01,\n",
       "       -8.32722754e-01,  3.66598522e+01,  2.29712897e+01,  2.60704796e+01,\n",
       "        3.86651182e+01,  8.71877442e+01,  6.15482888e+01,  5.47789562e+01,\n",
       "        5.98434737e+01,  7.30592552e+01])"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scale_poly_ridge_pipeline.named_steps['model'].coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 2.79150404e+03,  0.00000000e+00,  0.00000000e+00, -0.00000000e+00,\n",
       "        0.00000000e+00,  1.79824468e+03,  1.21366790e+03,  0.00000000e+00,\n",
       "        0.00000000e+00, -0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00, -0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00,  9.06744330e+02,  2.65432190e+02,  1.44230754e+02,\n",
       "        0.00000000e+00,  0.00000000e+00, -0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00,  0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n",
       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00, -0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00, -1.83493429e+01, -0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00,  0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "       -7.89654902e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        1.54399095e+02,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "       -3.92478164e+01,  0.00000000e+00,  1.64525847e+01, -0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00, -2.00665135e+01, -0.00000000e+00,\n",
       "        4.57923426e+01,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -1.47035020e+01,  0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00,  0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "       -8.58680002e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00, -0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n",
       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "       -5.81246791e-01, -0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00, -1.99747186e+00, -0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00, -0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -1.46167452e+01, -0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00, -0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n",
       "       -0.00000000e+00, -0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "        0.00000000e+00,  0.00000000e+00])"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scale_poly_lasso_pipeline.named_steps['model'].coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
